package simulador;

import eduni.simjava.Sim_entity;
import eduni.simjava.Sim_event;
import eduni.simjava.Sim_port;
import eduni.simjava.Sim_stat;
import eduni.simjava.Sim_system;
import eduni.simjava.distributions.Sim_negexp_obj;


public class Carro extends Sim_entity{

	private Sim_port entrada;
	private Sim_negexp_obj delay;
	private boolean ocupado;
	private Sim_stat stat;
	
	final static String PORTA_DE_ENTRADA = "Carro.in";
	final static String PREFIXO_DO_NOME_DA_ENTIDADE = "Carro.";

	public Carro(int numeroDoCarro, double tempoDeAluguel) {
		super(PREFIXO_DO_NOME_DA_ENTIDADE + numeroDoCarro);
		
	    delay = new Sim_negexp_obj("Delay", tempoDeAluguel);
	    add_generator(delay);

		entrada = new Sim_port(PORTA_DE_ENTRADA);
		add_port(entrada);
		ocupado = false;
		
		stat = new Sim_stat();
		stat.add_measure(Sim_stat.UTILISATION);
		stat.add_measure(Sim_stat.SERVICE_TIME);
		stat.add_measure(Sim_stat.ARRIVAL_RATE);
		stat.add_measure(Sim_stat.THROUGHPUT);
		set_stat(stat);
	}

	public void body() {
		while (Sim_system.running()) {
			Sim_event e = new Sim_event();
			sim_get_next(e);
			sim_trace(1, "Cliente pegou o carro.");
			ocupado = true;
			sim_process(delay.sample());
			ocupado = false;
			sim_trace(1, "Cliente devolveu o carro.");
			sim_completed(e);
		}
	}

	public boolean isOcupado() {
		return ocupado;
	}



}
